Authentification client avec certificat SSL sous NGINX

Bonjour à tous,

Après un moment à me battre avec mon Exchange pour faire de la double authentification j’ai fini par me rabattre sur NGINX.

Les solutions à la DUO et tout sont bien compliquées et elles dépendent toutes d’une tierce partie, ce qui est gênant pour faire quelque chose de basique.

 

On va donc utiliser l’authentification par certificat TLS client avant de laisser les gens (moi en l’occurrence) arriver sur l’OWA.

Dans l’idée, on va créer sa propre autorité de certification et générer un certificat auto-signé valide pour nos appareils afin de nous authentifier avec le reverse proxy nginx et d’autoriser la connexion à l’Exchange qui se trouve derrière.

 

Je me suis basé sur la mini procédure disponible ici : https://gist.github.com/mtigas/952344

 

Création de l’autorité de certification racine

On va d’abord créer un répertoire avec le NGINX pour garder toutes les clés :

mkdir /etc/nginx/private

cd /etc/nginx/private

 

On commence par créer la clé privée de notre propre autorité de certification :

openssl ecparam -genkey -name secp384r1 | openssl ec -out ca.key

 

Maintenant on va créer le certificat root de l’organisation :

openssl req -new -x509 -days 3650 -key ca.key -out ca.pem

 

Création du certificat client

On va maintenant créer la clé privée pour nous (le premier client) :

openssl ecparam -genkey -name secp384r1 | openssl ec -out client-remote.key

 

Créez une demande de certificat, attention, ne renseignez pas la même organisation ni le même CN que sur le premier certificat sinon cela ne marchera pas :

openssl req -new -key client-remote.key -out client-remote.csr

 

Signez la demande avec notre nouvelle autorité de certification, le serial des certificats sera à incrémenter pour chaque nouveau certificat :

openssl x509 -req -days 3650 -in client-remote.csr -CA ca.pem -CAkey ca.key -set_serial 001 -out client-remote.pem

 

Créez maintenant un PFX final avec un mot de passe que vous allez pouvoir exporter sur vos appareils.

openssl pkcs12 -export -out client-remote.full.pfx -inkey client-remote.key -in client-remote.pem -certfile ca.pem

 

Maintenant, gardez précieusement le fichier client-remote.full.pfx

 

Configuration de Nginx

Ouvrez le fichier de configuration de votre site et ajoutez ceci dans le bloc server de votre vhost.

ssl_client_certificate /etc/nginx/private/ca.pem;

ssl_verify_client on;

 

Redémarrez maintenant votre serveur Nginx.

 

Installation du certificat sous Firefox

Allez dans les options de Firefox, « vie privée et sécurité -> Voir les certificats » :

 

 

Maintenant, cliquez sur « Importer » et allez chercher votre fichier .pfx. Votre mot de passe sera nécessaire.

 

Maintenant, visitez votre site, vous recevrez une demande de confirmation du certificat :

Et normalement, si vous n’avez pas le certificat, vous verrez ce genre de message :

 

Voici ma double authentification pas chère pour Exchange, si vous avez mieux 🙂